package com.itheima.filter;

import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;

import java.io.IOException;

/**
 * 定义一个类，实现一个标准的Filter过滤器的接口
 * Filter类上加 @WebFilter 注解，并指定属性urlPatterns，通过这个属性指定过滤器要拦截哪些请求
 * 在启动类上面加上一个注解@ServletComponentScan，通过这个@ServletComponentScan注解来开启SpringBoot项目对于Servlet组件的支持。
 */

//@WebFilter(urlPatterns = "/*")  ///* 表示拦截浏览器的所有请求
public class DemoFilter implements Filter {


    /**
     *- 过滤器的初始化方法。在web服务器启动的时候会自动的创建Filter过滤器对象，
     * 在创建过滤器对象的时候会自动调用init初始化方法，这个方法只会被调用一次。
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
//        Filter.super.init(filterConfig);
        System.out.println("init 初始化方法执行了");

    }

    /**
     *这个方法是在每一次拦截到请求之后都会被调用，所以这个方法是会被调用多次的，
     * 每拦截到一次请求就会调用一次doFilter()方法。
     */
    @Override
    public void doFilter(ServletRequest servletRequest,
                         ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {

        System.out.println("DemoFilter拦截到了请求...放行前逻辑");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);

        System.out.println("DemoFilter放行后逻辑.....");
    }

    /**
     * 是销毁的方法。
     * 当我们关闭服务器的时候，它会自动的调用销毁方法destroy，而这个销毁方法也只会被调用一次
     */
    @Override
    public void destroy() {
//        Filter.super.destroy();
        System.out.println("destroy 销毁方法执行了");

    }
}
